package com.chenchao.javacommonclass;

import java.util.Arrays;

/**
 * @encoding : UTF-8
 * @Time : 2020/11/11 15:13
 * @Author : Chen Chao
 * @File : javaSE.com.chenchao.commonclass.StringTest.java
 * @Software : IntelliJ IDEA
 * @since : 1.8
 * 都实现了charSequence接口
 * 可变字符串:StringBuild StringBuffer
 * 不可变字符串：String，只能创建新的对象(新的内存地址)
 */
public class StringTest {
    public static void main(String[] args) {
        //changeAddress();
        //stringComparison();
        //test();
        //commonMethod();
        //test2();
        //test3();
        System.out.println(hasLength("   "));;
        test5();
    }


    /**
     * 字符串的本质是个char数组
     */
    public static void nature(){
        String str1="ABC";
        System.out.println(str1.length());
        //字符串常量池（方法区里面）没有，造一个
        String str2="ABC";
        //字符串常量池有，荡一个（没有创建新对象）
        //这种方式创建0~1个对象

        String str3=new String("ABC");
        //开辟空间，如果字符串常量池没有，就在常量池造一个
        //开辟空间，如果字符串常量池有，就在常量池搞一个拷贝对象（引用常量池对象）
        //这种方式创建1~2个对象
    }

    /**
     *字符串不可修改，会直接创建新的地址
     */
    public static void changeAddress(){
        String str="ABC";
        str="AB";
        //内存地址变了

    }

    /**
     * Sting覆盖了父类的equals()方法
     */
    public static void stringComparison(){
        String str1="ABC";
        String str2="ABC";
        String str3=new String("ABC");
        System.out.println(str1 == str2);
        System.out.println(str1 == str3);
        //==比较的是对象地址
        System.out.println(str2.equals(str3));
        //equals先比较地址，再比较内容
    }
    public static void test(){
        String str1="ABCD";
        String str2="A"+"BCD";
        String str3="AB"+"CD";
        String temp="AB";
        //上面这些编译时非自动拼合，编译优化
        String str4=temp+"CD";
        //这里有new的过程
        String str5=new String("ABCD");
        System.out.println(str1==str2);//true
        System.out.println(str1==str3);//true
        System.out.println(str1==str4);//false
        System.out.println(str1==str5);//false
    }
    public static void commonMethod(){
        //char数组转字符串
        char[] a=new char[]{'A','B','C'};
        String as=new String(a);
        System.out.println(as);

        //数组转字符串tocharArray
        System.out.println(as.toCharArray());

        //获取长度
        System.out.println(as.length());

        //获取某一个字符
        char a2=as.charAt(2);
        System.out.println(a2);
        System.out.println("===============");

        //返回一个子字符串在当前字符串当中的第一次位置
        String str3="GABCDEFGABC";
        String str4="ABC";
        System.out.println(str3.indexOf(str4));//1
        //返回一个子字符串在当前字符串当中的最后一次位置
        System.out.println(str3.lastIndexOf(str4));//8

        //字符转大小写
        String str5="abcd";
        String str6="ABCD";
        System.out.println(str6.toLowerCase());//abcd
        System.out.println(str5.toUpperCase());//ABCD

        //字符串判断
        System.out.println(str6.equals(str5));//false
        System.out.println(str6.equalsIgnoreCase(str5));//true
    }

    /**
     * 获取hello开头的后缀名
     */
    public static void test2(){
        String fileName =" abc.java;hello.myxq; hello.txt.java;hello.class" ;
        //;分割成数组split(";")
        String[] strings=fileName.split(";");
        System.out.println(Arrays.toString(strings));
        //判断每一个开头
        for (String string : strings) {
            //判断字符串是否以一个字符串开头(要先去空格)
            if(string.trim().startsWith("hello")) {
                System.out.println(string.substring(string.lastIndexOf(".")));
                //获取最后一个点的位置后，进行截取字符串
                //截取字符串substring()
            }
        }
    }

    /**
     * 字符串首字母大写
     */
    public static void test3(){
        String str="nfdv";
        //先获取第一个字母的字符串
        String s1 = str.substring(0, 1);
        //substring(0, 1)截取字符串
        //第一个字母大写
         s1= s1.toUpperCase();
        //获取第一个字母后面的内容
        String s2=str.substring(1);
        //拼接字符串
        String result=s1+s2;
        System.out.println(result);
    }

    /**
     * 判断字符串是否为空,"  "也为空
     */
    public static boolean hasLength(String string){
        //先判断是否为空对象
        //再判断剪除开头结尾空格后的内容是否是”“
        //return string!=null&&!"".equals(string.trim());
        return string!=null&&string.trim().length()>0;
    }
    /**
     * 去除空格
     */
    public static void test5(){
        String str=" sd gdfg ";
        //去除首位空格
        //sd gdfg
        System.out.println(str.trim());
        //去除所有空格replace(" ", "")替换
        System.out.println(str.replace(" ", ""));
        //sdgdfg
    }

}
